package com.yl.chainStore.entity.pay

import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.annotation.TableField
import com.baomidou.mybatisplus.annotation.TableId
import com.baomidou.mybatisplus.annotation.TableName
import com.yl.chainStore.common.Constants
import com.yl.chainStore.common.enums.TypeEnum
import com.yl.common.annotation.NoArg
import com.yl.common.getContext
import java.math.BigDecimal
import java.math.RoundingMode
import java.util.*

/**
 * <p>
 *  客户余额变动记录表
 * </p>
 *
 * @author cxw
 * @since 2021-07-30
 */
@NoArg
@TableName("pay_customer_money_flow")
data class PayCustomerMoneyFlow(

	/**
	 * id
	 */
	@TableId(value = "id", type = IdType.AUTO)
	var id: Long = 0,

	/**
	 * 关联ID
	 * use_type = TypeEnum.PAY_TYPE_BALANCE_ORDER_PAY 为 pay_order_customer_pay_log_detail 的id
	 * 				TypeEnum.PAY_TYPE_PAY_ORDER		为 pay_order_customer_pay_log 的 id
	 * 			TypeEnum.PAY_TYPE_ORDER_REFUND		为 pay_order_refund_log 的id
	 * 		PAY_TYPE_TOP_UP  为 pay_customer_balance_in_log 的id (后面加的)
	 *			PAY_TYPE_BALANCE_TRANSFER_SUB 为转账id
	 */
	@TableField("associate_id")
	var associateId: Long? = null,


	/**
	 * 金额
	 */
	@TableField("money")
	var money: Long,

	/**
	 * 使用后余额
	 */
	@TableField("balance")
	var balance: Long,

	/**
	 * 用户id
	 */
	@TableField("customer_id")
	var customerId: Long,

	/**
	 * 类型
	 * 481-550 用户余额变动类型
	 */
	@TableField("use_type")
	var useType: TypeEnum = TypeEnum.OTHER,

	/**
	 * 创建时间
	 */
	@TableField("create_time")
	var createTime: Date = Date(),

	/**
	 * 负责人（可后面加括号体现人员类型）
	 */
	@TableField("create_user_id")
	var createUserId: Long = getContext().userId,

	@TableField(exist = false)
	var createUserName: String? = null,

	/**
	 * 备注
	 */
	@TableField("remark")
	var remark: String? = null,

	/**
	 * 公司id
	 */
	@TableField("company_id")
	var companyId: Long = getContext().companyId,

	/**
	 * 分公司
	 */
	@TableField("sub_company_id")
	var subCompanyId: Long = getContext().subCompanyId,

	@TableField(exist = false)
	var subCompanyName: String? = null

){
	@TableField(exist = false)
	var moneyShow: BigDecimal?= null
		get() {

			if(field == null){
				return BigDecimal(money.div(Constants.OtherConfig.MONEY_TO_DB_DOUBLE)).setScale(2, RoundingMode.HALF_UP)
			}
			return field
		}
		set(value) {
			if(value != null){
				money = (value.multiply(BigDecimal(Constants.OtherConfig.MONEY_TO_DB_DOUBLE))).toLong()
				field = value
			}
		}
}
